<?php

namespace app\controllers;

use Yii;
use app\models\User;
use yii\helpers\Url;

class AccountsController extends \yii\web\Controller
{   
    public function actionView($accountId) {
        $response = Yii::$app->response;
        
        if (Yii::$app->user->isGuest) {
            $response->format = \yii\web\Response::FORMAT_JSON;
            $response->statusCode = 401;
            return ['message' => 'Неверные авторизационные данные'];
        } 

        // Проверяем корректность accountId
        if ($accountId === null || !ctype_digit($accountId) || $accountId <= 0) {
            $response->format = \yii\web\Response::FORMAT_JSON;
            $response->statusCode = 400;
            return ['message' => 'accountId должен быть целым положительным числом'];
        }

        // Ищем пользователя по accountId
        $user = User::findOne($accountId);      

        if ($user === null) {
            $response->format = \yii\web\Response::FORMAT_JSON;
            $response->statusCode = 404;
            return ['message' => 'Аккаунт с таким accountId не найден'];
        }
    
        // Формируем ответ
        $userData = [
        'id' => $user->id,
        'firstName' => $user->firstName,
        'lastName' => $user->lastName,
        'email' => $user->email,
        ];

        return $this->render('view', ['userData' => $userData]);
    }

    public function actionSearch($firstName = null, $lastName = null, $email = null, $form = 0, $size = 10) {
        $response = Yii::$app->response;
        $response->format = \yii\web\Response::FORMAT_JSON;

        if ($form < 0 || $size <= 0) {
            $response->statusCode = 400;
            return ['error' => 'Invalid form or size parameter'];
        }
    
        $query = (new \yii\db\Query())
            ->select(['id', 'firstName', 'lastName', 'email'])
            ->from('user');
    
        if (!is_null($firstName)) {
            $query->andWhere(['like', 'firstName', $firstName]);
        }
        if (!is_null($lastName)) {
            $query->andWhere(['like', 'lastName', $lastName]);
        }
        if (!is_null($email)) {
            $query->andWhere(['like', 'email', $email]);
        }
    

        $query->offset($form)->limit($size);

        $query->orderBy(['id' => SORT_ASC]);

        $accounts = $query->all();

        return $accounts;
    }


    public function actionUpdate($accountId)
    {
        $response = Yii::$app->response;
        $response->format = \yii\web\Response::FORMAT_JSON;
        
        if (Yii::$app->user->isGuest) {
            $response->statusCode = 401;
            return ['message' => 'Неверные авторизационные данные'];
        } 

        // Проверяем корректность accountId
        if ($accountId === null || !ctype_digit($accountId) || $accountId <= 0) {
            $response->statusCode = 400;
            $response->data = ['message' => 'accountId должен быть целым положительным числом'];
            $response->headers->set('Location', Url::to(['/'], true));
            return $response;
        }

        // Ищем пользователя по accountId
        $user = User::findOne($accountId);      

        if ($user === null) {
            $response->format = \yii\web\Response::FORMAT_JSON;
            $response->statusCode = 404;
            $response->data = ['message' => 'Аккаунт с таким accountId не найден'];
            $response->headers->set('Location', Url::to(['/'], true));
            return $response;
        }
    
        // Формируем ответ
        $userData = [
        'id' => $user->id,
        'firstName' => $user->firstName,
        'lastName' => $user->lastName,
        'email' => $user->email,
        ];
    }

    public function actionDelete($accountId)
    {
        $response = Yii::$app->response;
        $response->format = \yii\web\Response::FORMAT_JSON;
        
        $response->statusCode = 200;
        return ['message' => 'Все ок'];
    }


    public function actionPut() {
        // Инициализация cURL с указанием URL
        $ch = curl_init('http://weather/accounts/9');
    
        // Установка параметров запроса
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Возврат результата в виде строки
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); // Установка метода запроса PUT
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
            'firstName' => 'Михаил',
            'lastName' => 'Катагаров',
            'email' => 'mikatagarov@gmail.com',
            'password' => '12341234'
        ])); // Установка данных для отправки в формате JSON
    
        // Выполнение запроса
        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // Получаем HTTP-код ответа
    
        // Закрытие соединения cURL
        curl_close($ch);

        echo "Status: $httpCode";

        // Обработка статусов ответа
        if ($httpCode == 200) {
            // Обработка успешного ответа
            echo "Запрос успешно выполнен";
        } elseif ($httpCode == 400) {
            // Обработка ошибки при некорректных данных
            echo "Ошибка: некорректные данные";
        } elseif ($httpCode == 401) {
            // Обработка ошибки при неверной аутентификации
            echo "Ошибка: неверные авторизационные данные";
        } elseif ($httpCode == 403) {
            // Обработка ошибки при доступе к несвоему аккаунту
            echo "Ошибка: доступ запрещен";
        } elseif ($httpCode == 409) {
            // Обработка ошибки при конфликте данных (например, уже существующий email)
            echo "Ошибка: аккаунт с таким email уже существует";
        } else {
            // Обработка других возможных ошибок
            echo "Ошибка: неизвестная ошибка";
        }
    }
    
}    